﻿<Window x:Class="MathMLToCSharp.MainFrame"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MathMLToCSharp"
    xmlns:dv="clr-namespace:DenisVuyka.Controls.PropertyGrid;assembly=DenisVuyka.Controls.PropertyGrid"
    Title="MML# " Height="480" Width="640" WindowStartupLocation="CenterScreen"
    Name="myWindow" Foreground="White" Closing="myWindow_Closing" KeyDown="myWindow_KeyDown">
  
  <Window.Background>
    <LinearGradientBrush>
      <GradientStop Color="Black"/>
      <GradientStop Color="#333333"/>
    </LinearGradientBrush>
  </Window.Background>
  
  <Window.Resources>
    <local:TreeViewLineConverter x:Key="LineConverter"/>
    
    <SolidColorBrush x:Key="GlyphBrush" Color="#444" />
    <Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton">
      <Setter Property="Focusable" Value="False"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="ToggleButton">
            <Grid
              Width="15"
              Height="13"
              Background="White">
              <Path x:Name="ExpandPath"
                HorizontalAlignment="Left"
                VerticalAlignment="Center"
                Margin="1,1,1,1"
                Fill="{StaticResource GlyphBrush}"
                Data="M 4 0 L 8 4 L 4 8 Z"/>
            </Grid>
            <ControlTemplate.Triggers>
              <Trigger Property="IsChecked"
                   Value="True">
                <Setter Property="Data"
                    TargetName="ExpandPath"
                    Value="M 0 4 L 8 4 L 4 8 Z"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    <Style x:Key="TreeViewItemFocusVisual">
      <Setter Property="Control.Template">
        <Setter.Value>
          <ControlTemplate>
            <Border>
              <Rectangle Margin="0,0,0,0"
                     StrokeThickness="5"
                     Stroke="Black"
                     StrokeDashArray="1 2"
                     Opacity="0"/>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    <Style x:Key="{x:Type TreeViewItem}"
         TargetType="{x:Type TreeViewItem}">
      <Setter Property="Background"
          Value="Transparent"/>
      <Setter Property="HorizontalContentAlignment"
          Value="{Binding Path=HorizontalContentAlignment,
              RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
      <Setter Property="VerticalContentAlignment"
          Value="{Binding Path=VerticalContentAlignment,
              RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
      <Setter Property="Padding"
          Value="1,0,0,0"/>
      <Setter Property="Foreground"
          Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
      <Setter Property="FocusVisualStyle"
          Value="{StaticResource TreeViewItemFocusVisual}"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type TreeViewItem}">
            <Grid>
              <Grid.ColumnDefinitions>
                <ColumnDefinition MinWidth="19"
                          Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
              </Grid.ColumnDefinitions>
              <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition/>
              </Grid.RowDefinitions>

              <!-- Connecting Lines -->
              <Rectangle x:Name="HorLn" Height="1" Stroke="#8888"  Margin="10,0,0,0" SnapsToDevicePixels="true"/>
              <Rectangle x:Name="VerLn" Width="1" Stroke="#8888" Grid.RowSpan="2" SnapsToDevicePixels="true"/>
              <ToggleButton x:Name="Expander"
                      Style="{StaticResource ExpandCollapseToggleStyle}"
                      IsChecked="{Binding Path=IsExpanded,
                              RelativeSource={RelativeSource TemplatedParent}}"
                      ClickMode="Press"/>
              <Border Name="Bd"
                  Grid.Column="1"
                  Background="{TemplateBinding Background}"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  Padding="{TemplateBinding Padding}">
                <ContentPresenter x:Name="PART_Header"
                          ContentSource="Header"
                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
              </Border>
              <ItemsPresenter x:Name="ItemsHost"
                      Grid.Row="1"
                      Grid.Column="1"
                      Grid.ColumnSpan="2"/>
            </Grid>
            <ControlTemplate.Triggers>

              <!-- This trigger changes the connecting lines if the item is the last in the list -->
              <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource LineConverter}}" Value="true">
                <Setter TargetName="VerLn"
                    Property="Height"
                    Value="6"/>
                <Setter TargetName="VerLn"
                    Property="VerticalAlignment"
                    Value="Top"/>
              </DataTrigger>
              <Trigger Property="IsExpanded"
                   Value="false">
                <Setter TargetName="ItemsHost"
                    Property="Visibility"
                    Value="Collapsed"/>
              </Trigger>
              <Trigger Property="HasItems"
                   Value="false">
                <Setter TargetName="Expander"
                    Property="Visibility"
                    Value="Hidden"/>
              </Trigger>
              <MultiTrigger>
                <MultiTrigger.Conditions>
                  <Condition Property="HasHeader"
                         Value="false"/>
                  <Condition Property="Width"
                         Value="Auto"/>
                </MultiTrigger.Conditions>
                <Setter TargetName="PART_Header"
                    Property="MinWidth"
                    Value="75"/>
              </MultiTrigger>
              <MultiTrigger>
                <MultiTrigger.Conditions>
                  <Condition Property="HasHeader"
                         Value="false"/>
                  <Condition Property="Height"
                         Value="Auto"/>
                </MultiTrigger.Conditions>
                <Setter TargetName="PART_Header"
                    Property="MinHeight"
                    Value="19"/>
              </MultiTrigger>
              <Trigger Property="IsSelected"
                   Value="true">
                <Setter TargetName="Bd"
                    Property="Background"
                    Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                <Setter Property="Foreground"
                    Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
              </Trigger>
              <MultiTrigger>
                <MultiTrigger.Conditions>
                  <Condition Property="IsSelected"
                         Value="true"/>
                  <Condition Property="IsSelectionActive"
                         Value="false"/>
                </MultiTrigger.Conditions>
                <Setter TargetName="Bd"
                    Property="Background"
                    Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                <Setter Property="Foreground"
                    Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
              </MultiTrigger>
              <Trigger Property="IsEnabled"
                   Value="false">
                <Setter Property="Foreground"
                    Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>
  
  <Grid>
    <Grid.DataContext>
      <Binding ElementName="myWindow" Path="."/>
    </Grid.DataContext>
    <Grid.Resources>
      <local:BoolToVisibilityConverter x:Key="btvc"/>
    </Grid.Resources>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" MinHeight="26" />
      <RowDefinition />
      <RowDefinition Height="Auto" MinHeight="26" />
      <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition/>
      <ColumnDefinition Width="Auto"/>
      <ColumnDefinition Width="Auto" MaxWidth="300"/>
    </Grid.ColumnDefinitions>
    
    
    <TextBlock Margin="10,5,5,5" TextWrapping="Wrap">
      <Run FontWeight="Bold">MathML</Run>
      <Hyperlink Name="lnkPaste" Click="lnkPaste_Click" Foreground="White">paste from clipboard</Hyperlink>
      <Hyperlink Name="lnkFormat" Foreground="White" Click="lnkFormat_Click">format</Hyperlink>
    </TextBlock>
    
    <Border BorderBrush="White" CornerRadius="5" BorderThickness="5" Grid.Row="1" Margin="5">
      <TextBox AcceptsReturn="True" FontFamily="Consolas"
               Name="tbIn" TextChanged="tbIn_TextChanged" VerticalScrollBarVisibility="Auto" 
               HorizontalScrollBarVisibility="Auto" BorderBrush="White" />
    </Border>

    
    <TextBlock Margin="10,5,5,5" Grid.Row="2" >
      <Run FontWeight="Bold">Code</Run>
      <Hyperlink Name="lnkCopy" Click="lnkCopy_Click" Foreground="White">copy to clipboard</Hyperlink>
      <Hyperlink Name="lnkVerify" Foreground="White" Click="lnkVerify_Click">verify</Hyperlink>
    </TextBlock>
    
    <Border BorderBrush="White" CornerRadius="5" BorderThickness="5" Grid.Row="3" Margin="5">
      <TextBox AcceptsReturn="True" FontFamily="Consolas" BorderBrush="White"
             Name="tbOut" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
             TextWrapping="Wrap">
      </TextBox>
    </Border>

    <TreeView Grid.Row="0" Grid.RowSpan="4" Grid.Column="2" Name="mmlTree" Margin="5" 
              ScrollViewer.VerticalScrollBarVisibility="Visible">
      <TreeView.Visibility>
        <Binding Path="ShowTree" Converter="{StaticResource btvc}"/>
      </TreeView.Visibility>
    </TreeView>
    
    <dv:PropertyGrid Grid.Column="1" Grid.RowSpan="4" x:Name="propGrid" HorizontalContentAlignment="Right"
                     ShowPropertyFilter="False">
    </dv:PropertyGrid>
  </Grid>
</Window>
